package br.com.mauricioreis;

import java.util.List;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import br.com.mauricioreis.db.Medida;

public class MedidaAct extends Activity {
    public ListView viewMedida;
    public Button buttonIncluir;
    /** atributo criado para marcar o item selecionado no evento onCreateContextMenu */
    private Medida itemSelecionado;
    private static final int INCLUIR_ID = Menu.FIRST;
    private static final int ALTERAR_ID = Menu.FIRST + 1;
    private static final int EXCLUIR_ID = Menu.FIRST + 2;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.medida);
        montaBotaoIncluir();
        montaViewMedida();

        registerForContextMenu(viewMedida);

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        montaViewMedida();

    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        // Pega posição do item selecionado
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
        int posicaoItem = info.position;
        // pega o objeto medida da posição selecionada
        itemSelecionado = (Medida) viewMedida.getItemAtPosition(posicaoItem);
        menu.add(0, EXCLUIR_ID, 0, "Excluir");
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        // se for a medida padrão do sistema, não deixa usuario alterar
        if (itemSelecionado != null && itemSelecionado.getNome().equals(Medida.NOME_MEDIDA_PADRAO)) {
            new AlertDialog.Builder(MedidaAct.this).setTitle("Mensagem").setMessage("Esta medida não pode ser alterada!")
                    .setNeutralButton("OK", null).show();
            return true;
        }
        switch (item.getItemId()) {
        case EXCLUIR_ID:
            if (itemSelecionado != null) {
                Medida.excluir(MedidaAct.this, itemSelecionado);
                montaViewMedida();
                itemSelecionado = null;
                return true;
            }
        }
        return super.onContextItemSelected(item);
    }

    private void montaBotaoIncluir() {
        buttonIncluir = (Button) findViewById(R.id.medidaIncluir);
        buttonIncluir.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                Intent i = new Intent(MedidaAct.this, MedidaIncluirAct.class);

                startActivityForResult(i, INCLUIR_ID);
            }
        });
    }

    private void montaViewMedida() {
        List<Medida> medidas = Medida.listar(this, new Medida());
        ArrayAdapter<Medida> adapterMedida = new ArrayAdapter<Medida>(this, android.R.layout.simple_list_item_1, medidas);
        viewMedida = (ListView) findViewById(R.id.ListView01);
        viewMedida.setAdapter(adapterMedida);
        montaClickAlterar();
    }

    private void montaClickAlterar() {
        viewMedida.setOnItemClickListener(new OnItemClickListener() {
            @Override
            @SuppressWarnings(value = "rawtypes")
            public void onItemClick(AdapterView arg0, View arg1, int posicaoItem, long arg3) {
                // pega o objeto medida da posição selecionada
                Medida medidaSelecionada = (Medida) viewMedida.getItemAtPosition(posicaoItem);
                // se for a medida padrão do sistema, não deixa usuario alterar
                if (medidaSelecionada.getNome().equals(Medida.NOME_MEDIDA_PADRAO)) {
                    new AlertDialog.Builder(MedidaAct.this).setTitle("Mensagem").setMessage("Esta medida não pode ser alterada!")
                            .setNeutralButton("OK", null).show();
                } else {
                    // Cria um Intent passando a atividade atual e a classe da atividade seguinte
                    Intent i = new Intent(MedidaAct.this, MedidaAlterarAct.class);
                    i.putExtra("idMedida", medidaSelecionada.getId());
                    Toast.makeText(MedidaAct.this, i.getExtras().get("idMedida").toString(), Toast.LENGTH_SHORT);
                    // i.getExtras().get("idMedida");
                    startActivityForResult(i, ALTERAR_ID);
                }
            }
        });
    }

}
